<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>MiXiM: UWBIRIEEE802154APathlossModel Class Reference</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>


</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">MiXiM
   &#160;<span id="projectnumber">2.3</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
      <li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('a00222.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="#pro-static-attribs">Static Protected Attributes</a> &#124;
<a href="#pri-methods">Private Member Functions</a>  </div>
  <div class="headertitle">
<div class="title">UWBIRIEEE802154APathlossModel Class Reference<div class="ingroups"><a class="el" href="a00511.html">analogueModels - AnalogueModel implementations</a> &#124; <a class="el" href="a00524.html">IEEE 802.15.4A - Classes that implement the IEEE 802.15.4A UWB PHY.</a></div></div>  </div>
</div>
<div class="contents">
<!-- doxytag: class="UWBIRIEEE802154APathlossModel" --><!-- doxytag: inherits="AnalogueModel" -->
<p>This class implements the IEEE 802.15.4A Channel Model[1] in the MiXiM omnet++ modeling framework.  
 <a href="a00222.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="a00406_source.html">UWBIRIEEE802154APathlossModel.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for UWBIRIEEE802154APathlossModel:</div>
<div class="dyncontent">
<div class="center"><img src="a01060.png" border="0" usemap="#UWBIRIEEE802154APathlossModel_inherit__map" alt="Inheritance graph"/></div>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for UWBIRIEEE802154APathlossModel:</div>
<div class="dyncontent">
<div class="center"><img src="a01061.png" border="0" usemap="#UWBIRIEEE802154APathlossModel_coll__map" alt="Collaboration graph"/></div>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>

<p><a href="a01062.html">List of all members.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html">CMconfig</a></td></tr>
<tr><td colspan="2"><h2><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#a9529da672fa9576ea09f3aa22a129f57">initFromMap</a> (const <a class="el" href="a00009.html#ab1820eb5285a02a2464be54ec651feab">ParameterMap</a> &amp;)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize the analog model from XML map data.  <a href="#a9529da672fa9576ea09f3aa22a129f57"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#a3a27ac6615499a86832230bfaafabb7a">filterSignal</a> (airframe_ptr_t, const <a class="el" href="a00065.html">Coord</a> &amp;, const <a class="el" href="a00065.html">Coord</a> &amp;)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Has to be overriden by every implementation.  <a href="#a3a27ac6615499a86832230bfaafabb7a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af2ce425e03bfae194ea4e177a15ac1d1"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::Rayleigh" ref="af2ce425e03bfae194ea4e177a15ac1d1" args="(double param)" -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>Rayleigh</b> (double param)</td></tr>
<tr><td colspan="2"><h2><a name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static const bool&#160;</td><td class="memItemRight" valign="bottom"><b>implemented_CMs</b> []</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec663e65774ad756b25eac803cb5eea6"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::CMconfigs" ref="aec663e65774ad756b25eac803cb5eea6" args="[]" -->
static const <a class="el" href="a00047.html">CMconfig</a>&#160;</td><td class="memItemRight" valign="bottom"><b>CMconfigs</b> []</td></tr>
<tr><td colspan="2"><h2><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a834e439b81d2e27ed0d68cb6cca8f202"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::addEchoes" ref="a834e439b81d2e27ed0d68cb6cca8f202" args="(simtime_t_cref pulseStart)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><b>addEchoes</b> (simtime_t_cref pulseStart)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03d9ac143765c203951ad77105580f99"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::getPathloss" ref="a03d9ac143765c203951ad77105580f99" args="(double fc, double BW, double distance) const " -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>getPathloss</b> (double fc, double BW, double distance) const </td></tr>
<tr><td colspan="2"><h2><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a725ed7982be7b05533473705224fb14f"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::channelModel" ref="a725ed7982be7b05533473705224fb14f" args="" -->
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#a725ed7982be7b05533473705224fb14f">channelModel</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">selected channel model <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01d8518283319d88743424b617b120a4"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::cfg" ref="a01d8518283319d88743424b617b120a4" args="" -->
<a class="el" href="a00047.html">CMconfig</a>&#160;</td><td class="memItemRight" valign="bottom"><b>cfg</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e936ac29bd6f1b6a13cb375713c802c"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::tapThreshold" ref="a2e936ac29bd6f1b6a13cb375713c802c" args="" -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>tapThreshold</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5248dd72132658b53c94105ceed973ee"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::doShadowing" ref="a5248dd72132658b53c94105ceed973ee" args="" -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>doShadowing</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0518d7e5f60c691cc6f74c276fa9e4f6"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::doSmallScaleShadowing" ref="a0518d7e5f60c691cc6f74c276fa9e4f6" args="" -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>doSmallScaleShadowing</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97fc7222e893751c6f5b73f30bf509fc"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::newTxPower" ref="a97fc7222e893751c6f5b73f30bf509fc" args="" -->
<a class="el" href="a00212.html">TimeMapping</a>&lt; <a class="el" href="a00118.html">Linear</a> &gt; *&#160;</td><td class="memItemRight" valign="bottom"><b>newTxPower</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a39af1b08dba3a98a988116911633530f"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::txPower" ref="a39af1b08dba3a98a988116911633530f" args="" -->
<a class="el" href="a00058.html">ConstMapping</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>txPower</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af0bb825b917ffc2082da260085061c94"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::arg" ref="af0bb825b917ffc2082da260085061c94" args="" -->
<a class="el" href="a00013.html">Argument</a>&#160;</td><td class="memItemRight" valign="bottom"><b>arg</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3abd0cd96264449e34d4aeb4e0bc89cb"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::pulsesIter" ref="a3abd0cd96264449e34d4aeb4e0bc89cb" args="" -->
<a class="el" href="a00137.html">MappingIterator</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>pulsesIter</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a243433097abdfeb133f3de4fc6cc4b58"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::L" ref="a243433097abdfeb133f3de4fc6cc4b58" args="" -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>L</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a128721af88ba6f0206c3edc5509c416b"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::S" ref="a128721af88ba6f0206c3edc5509c416b" args="" -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>S</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ddaa02da18cb959411839a4607b7655"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::clusterStart" ref="a1ddaa02da18cb959411839a4607b7655" args="" -->
simtime_t&#160;</td><td class="memItemRight" valign="bottom"><b>clusterStart</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b00c482a4108dac490113040f50388d"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::gamma_l" ref="a7b00c482a4108dac490113040f50388d" args="" -->
simtime_t&#160;</td><td class="memItemRight" valign="bottom"><b>gamma_l</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c0e437740defdf3b45f7d91b1682269"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::Mcluster" ref="a7c0e437740defdf3b45f7d91b1682269" args="" -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>Mcluster</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8198110a3cc42d38fa59dc536b7d6ed1"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::Omega_l" ref="a8198110a3cc42d38fa59dc536b7d6ed1" args="" -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>Omega_l</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38db78b4797c1f3ff547131ddd29c243"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::averagePower" ref="a38db78b4797c1f3ff547131ddd29c243" args="" -->
double&#160;</td><td class="memItemRight" valign="bottom"><b>averagePower</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac09d7e8d30e8d036c02a35cc8fd3d12c"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::nbCalls" ref="ac09d7e8d30e8d036c02a35cc8fd3d12c" args="" -->
long&#160;</td><td class="memItemRight" valign="bottom"><b>nbCalls</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98d60e3a433cf3a80336b68fc562881d"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::averagePowers" ref="a98d60e3a433cf3a80336b68fc562881d" args="" -->
cOutVector&#160;</td><td class="memItemRight" valign="bottom"><b>averagePowers</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bc1b7adb02cda3d23015dc9225f5e11"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::pathlosses" ref="a3bc1b7adb02cda3d23015dc9225f5e11" args="" -->
cOutVector&#160;</td><td class="memItemRight" valign="bottom"><b>pathlosses</b></td></tr>
<tr><td colspan="2"><h2><a name="pro-static-attribs"></a>
Static Protected Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1f3fc2da25d13972c71ab56c4f1e9f10"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::PL0" ref="a1f3fc2da25d13972c71ab56c4f1e9f10" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>PL0</b> = 0.000040738</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad32c7d644953c8ff19fb6ee5ef6830e9"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::pathloss_exponent" ref="ad32c7d644953c8ff19fb6ee5ef6830e9" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>pathloss_exponent</b> = 1.79</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4eb30804fc4e704218f8a2802b472dbe"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::meanL" ref="a4eb30804fc4e704218f8a2802b472dbe" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>meanL</b> = 3</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a31ac6b2519c1cb09a8428f67e880cba4"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::Lambda" ref="a31ac6b2519c1cb09a8428f67e880cba4" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>Lambda</b> = 0.047E9</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adb762952d41a15c9d207d125fa4bf95a"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::lambda1" ref="adb762952d41a15c9d207d125fa4bf95a" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>lambda1</b> = 1.54E9</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72980c41d59f773f67d5d2078c0ee462"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::lambda2" ref="a72980c41d59f773f67d5d2078c0ee462" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>lambda2</b> = 0.15E9</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a488475434d64ba621aaf58d61fca8238"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::Beta" ref="a488475434d64ba621aaf58d61fca8238" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>Beta</b> = 0.095</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a915f10f82169f307c63aba1169a266e2"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::Gamma" ref="a915f10f82169f307c63aba1169a266e2" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>Gamma</b> = 22.61E-9</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03b6e29c4b871ff6b7849f3611b2d5c9"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::k_gamma" ref="a03b6e29c4b871ff6b7849f3611b2d5c9" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>k_gamma</b> = 0</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac6eaa4556d0a67d3c0bf1ea8e796118f"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::gamma_0" ref="ac6eaa4556d0a67d3c0bf1ea8e796118f" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>gamma_0</b> = 12.53 * 0.001 * 0.001 * 0.01</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2590e48c6f59fc6fe7339eabb5bd7df2"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::sigma_cluster" ref="a2590e48c6f59fc6fe7339eabb5bd7df2" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>sigma_cluster</b> = 1.883649089</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5eb8822e9088b4a413af447ce3e33af"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::fc" ref="ae5eb8822e9088b4a413af447ce3e33af" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>fc</b> = 4.492E9</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae5a683c567712479a284113cb8ba8df0"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::BW" ref="ae5a683c567712479a284113cb8ba8df0" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>BW</b> = 500E6</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a865aaa2e5967d407f3b2c894d81b36a1"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::fcMHz" ref="a865aaa2e5967d407f3b2c894d81b36a1" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>fcMHz</b> = 4492</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77ed5e6b8d481bb8590b982b17671541"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::d0" ref="a77ed5e6b8d481bb8590b982b17671541" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>d0</b> = 1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab1c164bcba2e21cbc69c791ef5eea809"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::ntx" ref="ab1c164bcba2e21cbc69c791ef5eea809" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>ntx</b> = 1</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5119c88a027fa29c7c3f0e006a2bf8da"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::nrx" ref="a5119c88a027fa29c7c3f0e006a2bf8da" args="" -->
static const double&#160;</td><td class="memItemRight" valign="bottom"><b>nrx</b> = 1</td></tr>
<tr><td colspan="2"><h2><a name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacc537a0375faa90f4705c1d0003d43d"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::UWBIRIEEE802154APathlossModel" ref="aacc537a0375faa90f4705c1d0003d43d" args="(const UWBIRIEEE802154APathlossModel &amp;)" -->
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#aacc537a0375faa90f4705c1d0003d43d">UWBIRIEEE802154APathlossModel</a> (const <a class="el" href="a00222.html">UWBIRIEEE802154APathlossModel</a> &amp;)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor is not allowed. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a223d24fc079d2193ae950266a937349d"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::operator=" ref="a223d24fc079d2193ae950266a937349d" args="(const UWBIRIEEE802154APathlossModel &amp;)" -->
<a class="el" href="a00222.html">UWBIRIEEE802154APathlossModel</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#a223d24fc079d2193ae950266a937349d">operator=</a> (const <a class="el" href="a00222.html">UWBIRIEEE802154APathlossModel</a> &amp;)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Assignment operator is not allowed. <br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>This class implements the IEEE 802.15.4A Channel Model[1] in the MiXiM omnet++ modeling framework. </p>
<p>"IEEE 802.15.4a channel model - final report", 2005, Andreas F. Molisch, Kannan Balakrishnan, Dajana Cassioli, Chia-Chin Chong, Shahriar Emami, Andrew Fort, Johan Karedal, Juergen Kunisch, Hans Schantz, Ulrich Schuster, Kai Siwiak</p>
<p>Citation of the following publication is appreciated if you use the MiXiM UWB PHY model for a publication of your own. J. Rousselot, J.-D. Decotignie, An ultra-wideband impulse radio PHY layer model for network simulation. SIMULATION January 2011 vol. 87 no. 1-2 82-112.</p>
<p>For more information, see also:</p>
<p>[1] J. Rousselot, J.-D. Decotignie, An ultra-wideband impulse radio PHY layer model for network simulation. SIMULATION January 2011 vol. 87 no. 1-2 82-112. <a href="http://dx.doi.org/10.1177/0037549710377767">http://dx.doi.org/10.1177/0037549710377767</a> [2] J. Rousselot, Ultra Low Power Communication Protocols for UWB Impulse Radio Wireless Sensor Networks. EPFL Thesis 4720, 2010. <a href="http://infoscience.epfl.ch/record/147987">http://infoscience.epfl.ch/record/147987</a> [3] A High-Precision Ultra Wideband Impulse Radio Physical Layer Model for Network Simulation, Jérôme Rousselot, Jean-Dominique Decotignie, Second International Omnet++ Workshop,Simu'TOOLS, Rome, 6 Mar 09. <a href="http://portal.acm.org/citation.cfm?id=1537714">http://portal.acm.org/citation.cfm?id=1537714</a> </p>
</div><hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="a3a27ac6615499a86832230bfaafabb7a"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::filterSignal" ref="a3a27ac6615499a86832230bfaafabb7a" args="(airframe_ptr_t, const Coord &amp;, const Coord &amp;)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void UWBIRIEEE802154APathlossModel::filterSignal </td>
          <td>(</td>
          <td class="paramtype">airframe_ptr_t&#160;</td>
          <td class="paramname"><em>frame</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="a00065.html">Coord</a> &amp;&#160;</td>
          <td class="paramname"><em>sendersPos</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="a00065.html">Coord</a> &amp;&#160;</td>
          <td class="paramname"><em>receiverPos</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Has to be overriden by every implementation. </p>
<p>Filters a specified AirFrame's <a class="el" href="a00192.html" title="The signal class stores the physical representation of the signal of an AirFrame.">Signal</a> by adding an attenuation over time to the <a class="el" href="a00192.html" title="The signal class stores the physical representation of the signal of an AirFrame.">Signal</a>.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">frame</td><td>The incomming frame. </td></tr>
    <tr><td class="paramname">sendersPos</td><td>The position of the frame sender. </td></tr>
    <tr><td class="paramname">receiverPos</td><td>The position of frame receiver. </td></tr>
  </table>
  </dd>
</dl>

<p>Implements <a class="el" href="a00009.html#a3242bc36a68dab53551d4ab1f1dab010">AnalogueModel</a>.</p>

<p>References <a class="el" href="a00192.html#a0beeef0f27c33145a0fca521df1c5f5c">Signal::addAttenuation()</a>, <a class="el" href="a00058.html#a5ff3a15fe6d536fa7a26a3fe1ff1b274">ConstMapping::createConstIterator()</a>, <a class="el" href="a00212.html#a99f25f5769ab59fd41080fedfa0dbaa5">TimeMapping&lt; Interpolator &gt;::createIterator()</a>, <a class="el" href="a00065.html#ab6a7bfcc5c55e5d8edbc7c0cb5a11626">Coord::distance()</a>, <a class="el" href="a00059.html#a047e853613d5a19ff34526d0cff8fcf9">ConstMappingIterator::getPosition()</a>, <a class="el" href="a00192.html#a2875223239e124d85949e1116cc12ae9">Signal::getReceptionEnd()</a>, <a class="el" href="a00192.html#a7c4710243cf87caf7dfc9f313e2619b2">Signal::getReceptionStart()</a>, <a class="el" href="a00013.html#a2ecb3b041b5b8721d6767531e4ac792a">Argument::getTime()</a>, <a class="el" href="a00192.html#a392ecf1a624edfb90243e7227370a772">Signal::getTransmissionPower()</a>, <a class="el" href="a00059.html#ad4419c259e747867f003d07d62d4259f">ConstMappingIterator::getValue()</a>, <a class="el" href="a00059.html#ad4bac7233c154b7086c6124d2e21be49">ConstMappingIterator::hasNext()</a>, <a class="el" href="a00059.html#a4a6348a453418da95978e570fec046fc">ConstMappingIterator::inRange()</a>, <a class="el" href="a00099.html#ab29d6f969fd0446306f9bca3d0f2bf66">IEEE802154A::mandatory_pulse</a>, <a class="el" href="a00059.html#afdafa6870cd19b3d35674a7bc777585d">ConstMappingIterator::next()</a>, and <a class="el" href="a00192.html#ad8c5494d0f7bd564bf14dc0c90f9a361">Signal::setTransmissionPower()</a>.</p>
<div class="fragment"><pre class="fragment">{
    <a class="code" href="a00192.html" title="The signal class stores the physical representation of the signal of an AirFrame.">Signal</a>&amp; signal = frame-&gt;getSignal();
    <span class="comment">// We create a new &quot;fake&quot; txPower to add multipath taps</span>
    <span class="comment">// and then attenuation is applied to all pulses.</span>

    <span class="comment">// (1) Power Delay Profile realization</span>
    <span class="keyword">using</span> std::max;

    txPower    = signal.<a class="code" href="a00192.html#a392ecf1a624edfb90243e7227370a772" title="Returns the function representing the transmission power of the signal.">getTransmissionPower</a>();
    newTxPower = <span class="keyword">new</span> <a class="code" href="a00212.html">TimeMapping&lt;Linear&gt;</a>(); <span class="comment">//dynamic_cast&lt;TimeMapping&lt;Linear&gt;*&gt; (txPower-&gt;clone()); // create working copy</span>
    pulsesIter = newTxPower-&gt;<a class="code" href="a00212.html#a99f25f5769ab59fd41080fedfa0dbaa5" title="Returns a pointer of a new Iterator which is able to iterate over the function and can change the val...">createIterator</a>(); <span class="comment">// create an iterator that we will use many times in addEchoes</span>
    <span class="comment">// generate number of clusters for this channel (channel coherence time &gt; packet air time)</span>
    L = max(1, poisson(cfg.Lmean));
    <span class="comment">// Choose block shadowing</span>
    S = powf(10.,(normal(0, cfg.sigma_s)/10.));

    <span class="comment">// Loop on each value of the original mapping and generate multipath echoes</span>
    <a class="code" href="a00059.html" title="Defines an const iterator for a ConstMapping which is able to iterate over the Mapping.">ConstMappingIterator</a>* iter = txPower-&gt;<a class="code" href="a00058.html#a5ff3a15fe6d536fa7a26a3fe1ff1b274" title="Returns a pointer of a new Iterator which is able to iterate over this Mapping.">createConstIterator</a>();

    <span class="keywordflow">while</span> (iter-&gt;<a class="code" href="a00059.html#a4a6348a453418da95978e570fec046fc" title="Returns true if the current position of the iterator is in range of the function.">inRange</a>()) {
        <span class="comment">// generate echoes for each non zero value</span>
        <span class="keywordflow">if</span> (iter-&gt;<a class="code" href="a00059.html#ad4419c259e747867f003d07d62d4259f" title="Returns the value of the Mapping at the current position.">getValue</a>() != 0) {
          <span class="comment">// give the pulse start position</span>
            addEchoes(iter-&gt;<a class="code" href="a00059.html#a047e853613d5a19ff34526d0cff8fcf9" title="Returns the current position of the iterator.">getPosition</a>().<a class="code" href="a00013.html#a2ecb3b041b5b8721d6767531e4ac792a" title="Returns the time value of this argument.">getTime</a>() - <a class="code" href="a00099.html#ab29d6f969fd0446306f9bca3d0f2bf66" title="mandatory pulse duration ( = 1 / bandwidth = 2 ns)">IEEE802154A::mandatory_pulse</a>/2);
        }
        <span class="keywordflow">if</span> (!iter-&gt;<a class="code" href="a00059.html#ad4bac7233c154b7086c6124d2e21be49" title="Returns true if the iterator has a next value it can iterate to on a call to &quot;next()&quot;.">hasNext</a>()) {
            <span class="keywordflow">break</span>;
        }
        iter-&gt;<a class="code" href="a00059.html#afdafa6870cd19b3d35674a7bc777585d" title="Iterates to the next position of the Mapping.">next</a>();
    }
    <span class="keyword">delete</span> iter;
    <span class="keyword">delete</span> pulsesIter;
    signal.<a class="code" href="a00192.html#ad8c5494d0f7bd564bf14dc0c90f9a361" title="Sets the function representing the transmission power of the signal.">setTransmissionPower</a>(newTxPower);


    <span class="comment">// Total radiated power Prx at that distance  [W]</span>
    <span class="comment">//double attenuation = 0.5 * ntx * nrx * cfg.PL0 / pow(distance / d0, cfg.n);</span>
    <span class="keywordtype">double</span> attenuation = getPathloss(fc, BW, receiverPos.<a class="code" href="a00065.html#ab6a7bfcc5c55e5d8edbc7c0cb5a11626" title="Returns the distance to Coord &#39;a&#39;.">distance</a>(sendersPos));
    pathlosses.record(attenuation);
    <span class="comment">// Power intensity I at that distance [W/m²]</span>
    <span class="comment">//attenuation = attenuation /(4*PI*pow(distance, cfg.n));</span>
    <span class="comment">// create mapping</span>
    <a class="code" href="a00200.html" title="TODO: short description for this class.">SimpleTimeConstMapping</a>* attMapping = <span class="keyword">new</span> <a class="code" href="a00200.html" title="TODO: short description for this class.">SimpleTimeConstMapping</a>(
        attenuation, signal.<a class="code" href="a00192.html#a7c4710243cf87caf7dfc9f313e2619b2" title="Returns the point in time when the receiving of the Signal started at the receiver module...">getReceptionStart</a>(), signal.<a class="code" href="a00192.html#a2875223239e124d85949e1116cc12ae9" title="Returns the point in time when the receiving of the Signal ended at the receiver module. Already includes the propagation delay.">getReceptionEnd</a>());

    signal.<a class="code" href="a00192.html#a0beeef0f27c33145a0fca521df1c5f5c" title="Adds a function representing an attenuation of the signal.">addAttenuation</a>(attMapping);

}
</pre></div>
</div>
</div>
<a class="anchor" id="a9529da672fa9576ea09f3aa22a129f57"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::initFromMap" ref="a9529da672fa9576ea09f3aa22a129f57" args="(const ParameterMap &amp;)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool UWBIRIEEE802154APathlossModel::initFromMap </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="a00009.html#ab1820eb5285a02a2464be54ec651feab">ParameterMap</a> &amp;&#160;</td>
          <td class="paramname"><em>params</em></td><td>)</td>
          <td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Initialize the analog model from XML map data. </p>
<p>This method should be defined for generic analog model initialization.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">params</td><td>The parameter map which was filled by XML reader.</td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if the initialization was successfully. </dd></dl>

<p>Reimplemented from <a class="el" href="a00009.html#a9c52493cdf1baa4110a83869e8bc13c5">AnalogueModel</a>.</p>

<p>References <a class="el" href="a00222.html#a725ed7982be7b05533473705224fb14f">channelModel</a>.</p>
<div class="fragment"><pre class="fragment">                                                                          {
    ParameterMap::const_iterator it;
    <span class="keywordtype">bool</span>                         bInitSuccess = <span class="keyword">true</span>;

    <span class="keywordflow">if</span> ((it = params.find(<span class="stringliteral">&quot;seed&quot;</span>)) != params.end()) {
        srand( ParameterMap::mapped_type(it-&gt;second).longValue() );
    }
    <span class="keywordflow">if</span> ((it = params.find(<span class="stringliteral">&quot;CM&quot;</span>)) != params.end()) {
        <a class="code" href="a00222.html#a725ed7982be7b05533473705224fb14f" title="selected channel model">channelModel</a> = ParameterMap::mapped_type(it-&gt;second).longValue();
        <span class="comment">// Check that this model is supported</span>
        assert(implemented_CMs[<a class="code" href="a00222.html#a725ed7982be7b05533473705224fb14f" title="selected channel model">channelModel</a>]);
        <span class="comment">// load the model parameters</span>
        cfg          = CMconfigs[<a class="code" href="a00222.html#a725ed7982be7b05533473705224fb14f" title="selected channel model">channelModel</a>];
    }
    <span class="keywordflow">else</span> {
        bInitSuccess = <span class="keyword">false</span>;
        opp_warning(<span class="stringliteral">&quot;No channel model defined in config.xml for UWBIRIEEE802154APathlossModel!&quot;</span>);
    }
    <span class="keywordflow">if</span> ((it = params.find(<span class="stringliteral">&quot;Threshold&quot;</span>)) != params.end()) {
        tapThreshold = ParameterMap::mapped_type(it-&gt;second).doubleValue();
    }
    <span class="keywordflow">else</span> {
        bInitSuccess = <span class="keyword">false</span>;
        opp_warning(<span class="stringliteral">&quot;No Threshold defined in config.xml for UWBIRIEEE802154APathlossModel!&quot;</span>);
    }
    <span class="keywordflow">if</span> ((it = params.find(<span class="stringliteral">&quot;shadowing&quot;</span>)) != params.end()) {
        doShadowing = ParameterMap::mapped_type(it-&gt;second).boolValue();
    }
    <span class="keywordflow">else</span> {
        doShadowing = <span class="keyword">false</span>;
    }

    <span class="keywordflow">return</span> <a class="code" href="a00222.html#a9529da672fa9576ea09f3aa22a129f57" title="Initialize the analog model from XML map data.">AnalogueModel::initFromMap</a>(params) &amp;&amp; bInitSuccess;
}
</pre></div>
</div>
</div>
<hr/><h2>Member Data Documentation</h2>
<a class="anchor" id="ad0bc6a56024f7e3cde2b6c88c8a2b730"></a><!-- doxytag: member="UWBIRIEEE802154APathlossModel::implemented_CMs" ref="ad0bc6a56024f7e3cde2b6c88c8a2b730" args="[]" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const bool UWBIRIEEE802154APathlossModel::implemented_CMs<code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Initial value:</b><div class="fragment"><pre class="fragment"> {
            <span class="keyword">false</span>, 
            <span class="keyword">true</span>,  
            <span class="keyword">true</span>,  
            <span class="keyword">true</span>,  
            <span class="keyword">false</span>, 
            <span class="keyword">true</span>,  
            <span class="keyword">true</span>,  
            <span class="keyword">true</span>,  
            <span class="keyword">false</span>,  
            <span class="keyword">false</span>  
        }
</pre></div>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>D:/Projects/MiXiM/extsrc/mixim/src/modules/analogueModel/<a class="el" href="a00406_source.html">UWBIRIEEE802154APathlossModel.h</a></li>
<li>D:/Projects/MiXiM/extsrc/mixim/src/modules/analogueModel/UWBIRIEEE802154APathlossModel.cc</li>
</ul>
</div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="a00222.html">UWBIRIEEE802154APathlossModel</a>      </li>

    <li class="footer">Generated on Tue Mar 5 2013 21:26:33 for MiXiM by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
   </ul>
 </div>


</body>
</html>
